{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0  1  2  3  4]\n",
      " [ 5  6  7  8  9]\n",
      " [10 11 12 13 14]]\n",
      "(3, 5)\n",
      "2\n",
      "int32\n",
      "4\n",
      "15\n",
      "对每个数进行exp运算 [4.85165195e+08 1.06864746e+13 2.35385267e+17 5.18470553e+21]\n",
      "切片运算 [30 40 50]\n",
      "迭代运算：\n",
      "40\n",
      "60\n",
      "80\n",
      "100\n",
      "加法运算： [[ 6.  8.]\n",
      " [10. 12.]]\n",
      "减法运算： [[-4. -4.]\n",
      " [-4. -4.]]\n",
      "乘法运算: [[ 5. 12.]\n",
      " [21. 32.]]\n",
      "除法运算： [[0.2        0.33333333]\n",
      " [0.42857143 0.5       ]]\n",
      "矩阵运算: [[19. 22.]\n",
      " [43. 50.]]\n",
      "广播： [[ 2  2  4]\n",
      " [ 5  5  7]\n",
      " [ 8  8 10]\n",
      " [11 11 13]]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "a = np.arange(15).reshape(3, 5)\n",
    "print(a)\n",
    "'''了解它的结构''' \n",
    "print(a.shape )  # shape ,是数组的维数，这是由每个维度的大小组成的一个元组，对于一个 n 行 m 列的矩阵。shape 是 (n, m)\n",
    "print(a.ndim)  # ndim :数组的 axes （维数）数值大小\n",
    "print(a.dtype.name)  # 在数组中描述元素类型的一个对象\n",
    "print(a.itemsize)  # itemsize:数组中每个元素所占字节数。例如，一个 float64 的 itemsize 是 8 ( = 64/8bit)\n",
    "print(a.size) #size:数组元素的个数总和，这等于 shape 元组数字的乘积。\n",
    "\n",
    "'''基本操作'''\n",
    "B = np.array( [20,30,40,50] )\n",
    "bwxp=np.exp(B)\n",
    "print(\"对每个数进行exp运算\",bwxp)\n",
    "\n",
    "'''索引迭代'''\n",
    "bsort=B[1:]\n",
    "print(\"切片运算\",bsort)\n",
    "print(\"迭代运算：\")\n",
    "for  i in B:\n",
    "    print(i*2)\n",
    "\n",
    "'''常用计算'''\n",
    "x = np.array([[1,2],[3,4]], dtype=np.float64)\n",
    "y = np.array([[5,6],[7,8]], dtype=np.float64)\n",
    "print(\"加法运算：\",x+y)\n",
    "print(\"减法运算：\",x-y)\n",
    "print(\"乘法运算:\",x*y)\n",
    "print(\"除法运算：\",x/y)\n",
    "print(\"矩阵运算:\",x.dot(y))\n",
    "\n",
    "# 广播机制，它让Numpy可以让不同大小的矩阵在一起进行数学计算\n",
    "x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])\n",
    "v = np.array([1, 0, 1])\n",
    "y = x + v\n",
    "print(\"广播：\",y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   B   C   D\n",
      "2013-01-01   0   1   2   3\n",
      "2013-01-02   4   5   6   7\n",
      "2013-01-03   8   9  10  11\n",
      "2013-01-04  12  13  14  15\n",
      "2013-01-05  16  17  18  19\n",
      "2013-01-06  20  21  22  23\n",
      "选择A的数据： 2013-01-01     0\n",
      "2013-01-02     4\n",
      "2013-01-03     8\n",
      "2013-01-04    12\n",
      "2013-01-05    16\n",
      "2013-01-06    20\n",
      "Freq: D, Name: A, dtype: int32\n",
      "##############################################################\n",
      "跨越多行的选择数据：             A  B   C   D\n",
      "2013-01-01  0  1   2   3\n",
      "2013-01-02  4  5   6   7\n",
      "2013-01-03  8  9  10  11\n",
      "根据标签选择： A    4\n",
      "B    5\n",
      "C    6\n",
      "D    7\n",
      "Name: 2013-01-02 00:00:00, dtype: int32\n",
      "根据位置坐标来选择 13\n",
      "             A  B   C   D  E\n",
      "2013-01-01   0  1   2   3  1\n",
      "2013-01-02   4  5   6   7  2\n",
      "2013-01-03   8  0  10  11  3\n",
      "2013-01-04  12  0  14  15  4\n",
      "2013-01-05  16  0  18  19  5\n",
      "2013-01-06  20  0  22  23  6\n",
      "##############################################################\n",
      "             A  B   C   D  E\n",
      "2013-01-01   0  1   2   3  1\n",
      "2013-01-02   4  5   6   7  2\n",
      "2013-01-03   8  0  10  11  3\n",
      "2013-01-04  12  0  14  15  4\n",
      "2013-01-05  16  0  18  19  5\n",
      "2013-01-06  20  0  22  23  6\n",
      "合并后的数据：      a    b    c    d\n",
      "0  3.0  3.0  3.0  3.0\n",
      "1  3.0  3.0  3.0  3.0\n",
      "2  3.0  3.0  3.0  3.0\n",
      "3  0.0  0.0  0.0  0.0\n",
      "4  0.0  0.0  0.0  0.0\n",
      "5  0.0  0.0  0.0  0.0\n",
      "6  2.0  2.0  2.0  2.0\n",
      "7  2.0  2.0  2.0  2.0\n",
      "8  2.0  2.0  2.0  2.0\n",
      "纵向外的方式合并:      a    b    c    d\n",
      "1  3.0  3.0  3.0  3.0\n",
      "2  3.0  3.0  3.0  3.0\n",
      "3  3.0  3.0  3.0  3.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  0.0  0.0  0.0  0.0\n",
      "4  0.0  0.0  0.0  0.0\n",
      "append的方式添加：      a    b    c    d\n",
      "0  3.0  3.0  3.0  3.0\n",
      "1  3.0  3.0  3.0  3.0\n",
      "2  3.0  3.0  3.0  3.0\n",
      "3  2.0  2.0  2.0  2.0\n",
      "4  2.0  2.0  2.0  2.0\n",
      "5  2.0  2.0  2.0  2.0\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "#选择数据\n",
    "dates = pd.date_range('20130101', periods=6)         # 创建一个6X4矩阵数据\n",
    "df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])\n",
    "print(df)\n",
    "print(\"选择A的数据：\",df['A'])\n",
    "print(\"##############################################################\")\n",
    "print(\"跨越多行的选择数据：\",df[0:3])\n",
    "#使用标签来选择数据 loc\n",
    "print(\"根据标签选择：\",df.loc['20130102'])\n",
    "#根据位置进行选择iloc\n",
    "print(\"根据位置坐标来选择\",df.iloc[3,1])\n",
    "#设置值\n",
    "df.B[df.A>4] = 0 #根据条件设置，对于A？4的位置，将B设置为0\n",
    "df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130101',periods=6)) #添加数据，但是长度必须对齐\n",
    "print(df)\n",
    "print(\"##############################################################\")\n",
    "#处理数据\n",
    "#df.iloc[0,1] = np.nan\n",
    "#df.iloc[1,2] = np.nan\n",
    "#df.dropna(axis=1,how='any') # axis=0,     # 0: 对行进行操作; 1: 对列进行操作, 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop\n",
    "df.fillna(value=0)#将NAN 的值用1来代替\n",
    "print(df)\n",
    "#合并\n",
    "df1 = pd.DataFrame(np.ones((3,4))*3, columns=['a','b','c','d'] ,index=[1,2,3])\n",
    "df2 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'],index=[2,3,4])\n",
    "df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d'])\n",
    "\n",
    "#concat纵向合并\n",
    "res = pd.concat([df1, df2, df3], axis=0)\n",
    "res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)#重置index\n",
    "print(\"合并后的数据：\",res)\n",
    "#join方式合并\n",
    "#纵向\"外\"合并df1与df2\n",
    "res = pd.concat([df1, df2], axis=0, join='outer')\n",
    "print(\"纵向外的方式合并:\",res)\n",
    "#append方式添加数据\n",
    "s1 = pd.Series([1,2,3,4], index=['a','b','c','d'])\n",
    "res = df1.append(df3, ignore_index=True)\n",
    "print(\"append的方式添加：\",res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#简单例子\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "%matplotlib inline\n",
    "X = np.linspace(-np.pi, np.pi, 256, endpoint=True)\n",
    "C, S = np.cos(X), np.sin(X)\n",
    "plt.plot(X,C)\n",
    "plt.plot(X,S)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 其他图像\n",
    "import matplotlib.path as mpath\n",
    "import matplotlib.patches as mpatches\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import font_manager as fm\n",
    "# 显示中文\n",
    "prop = fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "Path = mpath.Path\n",
    "path_data = [\n",
    "    (Path.MOVETO, (1.58, -2.57)),\n",
    "    (Path.CURVE4, (0.35, -1.1)),\n",
    "    (Path.CURVE4, (-1.75, 2.0)),\n",
    "    (Path.CURVE4, (0.375, 2.0)),\n",
    "    (Path.LINETO, (0.85, 1.15)),\n",
    "    (Path.CURVE4, (2.2, 3.2)),\n",
    "    (Path.CURVE4, (3, 0.05)),\n",
    "    (Path.CURVE4, (2.0, -0.5)),\n",
    "    (Path.CLOSEPOLY, (1.58, -2.57)),\n",
    "]\n",
    "codes, verts = zip(*path_data)\n",
    "path = mpath.Path(verts, codes)\n",
    "patch = mpatches.PathPatch(path, facecolor='r', alpha=0.5)\n",
    "ax.add_patch(patch)\n",
    "\n",
    "# plot control points and connecting lines\n",
    "x, y = zip(*path.vertices)\n",
    "#line, = ax.plot(x, y, 'go-')\n",
    "\n",
    "ax.grid()\n",
    "ax.axis('equal')\n",
    "plt.title(u'你的心', fontproperties=prop)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
